package jee.boot.common.remote;

/**
 * 访问远端的服务接口<br>
 * 1. 同一进程的不同module中进行访问,编译器无法直接引用,但可以通过反射在运行时被调用
 * 2. 不同进程(不同服务)的server中进行访问,基于Feign或者RestTemplate进行访问
 */
public interface RemoteEndpoint {
    /**
     * @param serviceId    远程服务id,
     * @param path         远程服务path
     * @param param        请求参数
     * @param responseType 返回数据类型设定
     * @return 返回响应数据
     */
    <T> T executePost(String serviceId, String path, Object param, Class<?> responseType);

    /**
     * @param serviceId    远程服务id,
     * @param path         远程服务path
     * @param param        请求参数
     * @param responseType 返回数据类型设定
     * @param processPriority 流程优先级: true: 如果在本地发现当前接口调用,则从本地执行,不需要进行远程访问,false: 无论本地是否发现当前接口,都从远程服务上调用该接口
     * @return 返回响应数据
     */
    default <T> T executePost(String serviceId, String path, Object param, Class<?> responseType, boolean processPriority) {
        return (T) responseType.getClass();
    }
}
